<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/klist.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/klist.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="k">/*</span>
<a name="2" /><span class="True">       2:</span> <span class="k"> *    klist.h - Some generic list helpers, extending struct list_head a bit.</span>
<a name="3" /><span class="True">       3:</span> <span class="k"> *</span>
<a name="4" /><span class="True">       4:</span> <span class="k"> *    Implementations are found in lib/klist.c</span>
<a name="5" /><span class="True">       5:</span> <span class="k"> *</span>
<a name="6" /><span class="True">       6:</span> <span class="k"> *</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> *    Copyright (C) 2005 Patrick Mochel</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> *</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> *    This file is rleased under the GPL v2.</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> */</span>
<a name="11" /><span class="True">      11:</span> 
<a name="12" /><span class="True">      12:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX0tMSVNUX0hfMA__"><span class="b">_LINUX_KLIST_H</span></a>
<a name="13" /><span class="True">      13:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX0tMSVNUX0hfMA__"><span class="b">_LINUX_KLIST_H</span></a>
<a name="14" /><span class="True">      14:</span> 
<a name="15" /><span class="True">      15:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">spinlock</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="16" /><span class="True">      16:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">kref</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="17" /><span class="True">      17:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">list</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="18" /><span class="True">      18:</span> 
<a name="19" /><span class="True">      19:</span> <span class="m">struct</span> <span class="b">klist_node</span><span class="f">;</span>
<a name="20" /><span class="True">      20:</span> <span class="m">struct</span> <span class="b">klist</span> <span class="f">{</span>
<a name="21" /><span class="True">      21:</span>     <span class="b">spinlock_t</span>        <span class="b">k_lock</span><span class="f">;</span>
<a name="22" /><span class="True">      22:</span>     <span class="m">struct</span> <span class="b">list_head</span>    <span class="b">k_list</span><span class="f">;</span>
<a name="23" /><span class="True">      23:</span>     <span class="m">void</span>            <span class="f">(</span><span class="f">*</span><span class="b">get</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="24" /><span class="True">      24:</span>     <span class="m">void</span>            <span class="f">(</span><span class="f">*</span><span class="b">put</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="25" /><span class="True">      25:</span> <span class="f">}</span> <span class="b">__attribute__</span> <span class="f">(</span><span class="f">(</span><span class="b">aligned</span> <span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="26" /><span class="True">      26:</span> 
<a name="27" /><span class="True">      27:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_S0xJU1RfSU5JVF8w"><span class="b">KLIST_INIT</span></a><span class="f">(</span><span class="b">_name</span><span class="f">,</span> <span class="b">_get</span><span class="f">,</span> <span class="b">_put</span><span class="f">)</span>                    \
<a name="28" /><span class="True">      28:</span>     <span class="f">{</span> <span class="f">.</span><span class="b">k_lock</span>    <span class="f">=</span> <a href="cpu.c_macros_ref.html#_X19TUElOX0xPQ0tfVU5MT0NLRURfMA__"><span class="b">__SPIN_LOCK_UNLOCKED</span></a><span class="f">(</span><span class="b">_name</span><span class="f">.</span><span class="b">k_lock</span><span class="f">)</span><span class="f">,</span>        \
<a name="29" /><span class="True">      29:</span>       <span class="f">.</span><span class="b">k_list</span>    <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TElTVF9IRUFEX0lOSVRfMA__"><span class="b">LIST_HEAD_INIT</span></a><span class="f">(</span><span class="b">_name</span><span class="f">.</span><span class="b">k_list</span><span class="f">)</span><span class="f">,</span>            \
<a name="30" /><span class="True">      30:</span>       <span class="f">.</span><span class="b">get</span>        <span class="f">=</span> <span class="b">_get</span><span class="f">,</span>                        \
<a name="31" /><span class="True">      31:</span>       <span class="f">.</span><span class="b">put</span>        <span class="f">=</span> <span class="b">_put</span><span class="f">,</span> <span class="f">}</span>
<a name="32" /><span class="True">      32:</span> 
<a name="33" /><span class="True">      33:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX0tMSVNUXzA_"><span class="b">DEFINE_KLIST</span></a><span class="f">(</span><span class="b">_name</span><span class="f">,</span> <span class="b">_get</span><span class="f">,</span> <span class="b">_put</span><span class="f">)</span>                    \
<a name="34" /><span class="True">      34:</span>     <span class="m">struct</span> <span class="b">klist</span> <span class="b">_name</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_S0xJU1RfSU5JVF8w"><span class="b">KLIST_INIT</span></a><span class="f">(</span><span class="b">_name</span><span class="f">,</span> <span class="b">_get</span><span class="f">,</span> <span class="b">_put</span><span class="f">)</span>
<a name="35" /><span class="True">      35:</span> 
<a name="36" /><span class="True">      36:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">klist_init</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist</span> <span class="f">*</span><span class="b">k</span><span class="f">,</span> <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">get</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="f">)</span><span class="f">,</span>
<a name="37" /><span class="True">      37:</span>                <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">put</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="38" /><span class="True">      38:</span> 
<a name="39" /><span class="True">      39:</span> <span class="m">struct</span> <span class="b">klist_node</span> <span class="f">{</span>
<a name="40" /><span class="True">      40:</span>     <span class="m">void</span>            <span class="f">*</span><span class="b">n_klist</span><span class="f">;</span>    <span class="k">/* never access directly */</span>
<a name="41" /><span class="True">      41:</span>     <span class="m">struct</span> <span class="b">list_head</span>    <span class="b">n_node</span><span class="f">;</span>
<a name="42" /><span class="True">      42:</span>     <span class="m">struct</span> <span class="b">kref</span>        <span class="b">n_ref</span><span class="f">;</span>
<a name="43" /><span class="True">      43:</span> <span class="f">}</span><span class="f">;</span>
<a name="44" /><span class="True">      44:</span> 
<a name="45" /><span class="True">      45:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">klist_add_tail</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">,</span> <span class="m">struct</span> <span class="b">klist</span> <span class="f">*</span><span class="b">k</span><span class="f">)</span><span class="f">;</span>
<a name="46" /><span class="True">      46:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">klist_add_head</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">,</span> <span class="m">struct</span> <span class="b">klist</span> <span class="f">*</span><span class="b">k</span><span class="f">)</span><span class="f">;</span>
<a name="47" /><span class="True">      47:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">klist_add_after</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">,</span> <span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="b">pos</span><span class="f">)</span><span class="f">;</span>
<a name="48" /><span class="True">      48:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">klist_add_before</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">,</span> <span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="b">pos</span><span class="f">)</span><span class="f">;</span>
<a name="49" /><span class="True">      49:</span> 
<a name="50" /><span class="True">      50:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">klist_del</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="51" /><span class="True">      51:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">klist_remove</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="52" /><span class="True">      52:</span> 
<a name="53" /><span class="True">      53:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">klist_node_attached</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="54" /><span class="True">      54:</span> 
<a name="55" /><span class="True">      55:</span> 
<a name="56" /><span class="True">      56:</span> <span class="m">struct</span> <span class="b">klist_iter</span> <span class="f">{</span>
<a name="57" /><span class="True">      57:</span>     <span class="m">struct</span> <span class="b">klist</span>        <span class="f">*</span><span class="b">i_klist</span><span class="f">;</span>
<a name="58" /><span class="True">      58:</span>     <span class="m">struct</span> <span class="b">klist_node</span>    <span class="f">*</span><span class="b">i_cur</span><span class="f">;</span>
<a name="59" /><span class="True">      59:</span> <span class="f">}</span><span class="f">;</span>
<a name="60" /><span class="True">      60:</span> 
<a name="61" /><span class="True">      61:</span> 
<a name="62" /><span class="True">      62:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">klist_iter_init</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist</span> <span class="f">*</span><span class="b">k</span><span class="f">,</span> <span class="m">struct</span> <span class="b">klist_iter</span> <span class="f">*</span><span class="b">i</span><span class="f">)</span><span class="f">;</span>
<a name="63" /><span class="True">      63:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">klist_iter_init_node</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist</span> <span class="f">*</span><span class="b">k</span><span class="f">,</span> <span class="m">struct</span> <span class="b">klist_iter</span> <span class="f">*</span><span class="b">i</span><span class="f">,</span>
<a name="64" /><span class="True">      64:</span>                  <span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="65" /><span class="True">      65:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">klist_iter_exit</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_iter</span> <span class="f">*</span><span class="b">i</span><span class="f">)</span><span class="f">;</span>
<a name="66" /><span class="True">      66:</span> <span class="m">extern</span> <span class="m">struct</span> <span class="b">klist_node</span> <span class="f">*</span><span class="b">klist_next</span><span class="f">(</span><span class="m">struct</span> <span class="b">klist_iter</span> <span class="f">*</span><span class="b">i</span><span class="f">)</span><span class="f">;</span>
<a name="67" /><span class="True">      67:</span> 
<a name="68" /><span class="True">      68:</span> <span class="f">#</span><span class="n">endif</span>
<a name="69" /><span class="True">      69:</span> </pre>
  </body>
</html>
